A module system permits the definition of a set of modules. Each module in a module system corresponds to a respective collection of code. A module system specifies how a collection of code corresponding to a particular module can access code corresponding to other modules. A module descriptor, for a particular module, expresses other modules upon which the particular module may depend. The declaration of a dependency on another module may be referred to as an explicit dependency. A module descriptor also expresses the elements of a particular module that are exposed by the particular module to the other modules. These other modules declare an explicit dependency on the particular module within respective descriptors. Other modules which do not declare an explicit dependency on the particular module are restricted from accessing the elements of the particular module.
A proxy class in a particular module of the module system cannot implement interfaces in other modules that have not been exposed to the particular module. If the proxy class is located in a same module as a first non-exposed publicly accessible interface, the proxy class may implement the first non-exposed publicly accessible interface. However, that proxy class cannot implement a second non-exposed publicly accessible interface within a second different module than the proxy class.
The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.